索引跟B+Tree是不同的東西,但是設計上也是有關聯,接下來就用我目前的理解方式來組織一下索引
主鍵索引又稱聚簇索引(clustered index),就是PK在使用的索引。一張表一定會有這個索引,過程如下:當創建一張表的時候,如果我們沒有設定PK,MySQL就會找沒有重複資料的欄位將他設為PK,如果還是沒有這種欄位,就會做一個隱藏欄位幫我們的表維護一個主鍵索引。
輔助索引又稱二級索引或非聚簇索引
主鍵索引跟輔助索引在儲存上有一個最大的區別:
主鍵索引的葉子節點,會儲存完整的資料,而輔助索引的葉子節點是儲存主鍵,所以在查輔助索引查到資料後,會再繼續查主鍵索引的樹。
聯合索引有兩種
聯合主鍵索引:聯合主鍵索引不能重複,
聯合索引:可以重複,主要作為查詢加速之用。
全文索引是用在在資料內做全文搜尋加速使用,全文索引使用一種倒排索引的技術(Inverted Index),可以用很好的效率在文本中配對字段。
以下對table下全文索引
CREATE TABLE articles (
id INT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
title VARCHAR(200),
body TEXT,
FULLTEXT (title, body) -- 在 `title` 和 `body` 欄位上創建全文索引
) ENGINE=InnoDB;
以下使用 Match Against 關鍵字做全文索引搜尋
SELECT * FROM articles
WHERE MATCH(title, body) AGAINST('database systems');
全文索引適合大量文本的字段搜尋,小文本不太適合使用這種索引
自適應Hash索引,Hash索引的特色就是等值查詢或in查詢好用,無法範圍查找,所以不能作為主要的索引來使用,在MySQL裡,對於頻繁被查詢的表,會自動生成自適應Hash索引(Adaptive Hash index, AHI),Hash查詢O(1)的特性,用在等值查詢或者是in語法可以加速查詢。